package com.mycompany.rest.service;

import java.util.ArrayList;
import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

import com.mycompany.rest.domain.Artista;
import com.mycompany.rest.domain.Contenido;

@Service("contenidoService")
public class ContenidoService {

protected static Logger logger = Logger.getLogger("service");
	
	// In-memory list
	private List<Contenido> contenidos = new ArrayList<Contenido>();
	
	public ContenidoService() {
		logger.debug("Init database");
		
		// Create in-memory list
		Artista a1= new Artista();
		a1.setNumero((long)500);
		a1.setNombre("melcochita");
		
		Contenido c1= new Contenido();
		c1.setId((long)1);
		c1.setArtista(a1);
		c1.setContenido("Chiste 1");
		
		Contenido c2= new Contenido();
		c2.setId((long)2);
		c2.setArtista(a1);
		c2.setContenido("Chiste 2");
		
		Contenido c3= new Contenido();
		c3.setId((long)3);
		c3.setArtista(a1);
		c3.setContenido("Chiste 3");
		
		contenidos.add(c1);
		contenidos.add(c2);
		contenidos.add(c3);
	}
	
	/**
	 * Retrieves all persons
	 */
	public List<Contenido> getAll() {
		logger.debug("Retrieving all persons");
		
		return contenidos;
	}
	
	/**
	 * Retrieves a single person
	 */
	public Contenido get( Long id ) {
		logger.debug("Retrieving person with id: " + id);
		
		for (Contenido contenido:contenidos) {
			if (contenido.getId().longValue() == id.longValue()) {
				logger.debug("Found record");
				return contenido;
			}
		}
		
		logger.debug("No records found");
		return null;
	}
	
	/**
	 * Adds a new person
	 */
	public Contenido add(Contenido contenido) {
		logger.debug("Adding new person");
		
		try {
			// Find suitable id
			Long newId = 0L;
			Boolean hasFoundSuitableId = false;
			while(hasFoundSuitableId == false) {
				for (int i=0; i <contenidos.size(); i++) {
					if (contenido.getId().longValue() == newId.longValue()) {
						newId++;
						break;
					}
					
					// Exit while loop
					if(i==contenidos.size()-1) {
						logger.debug("Assigning id: " + newId);
						hasFoundSuitableId = true;
					}
				}
			}
			
			// Assign new id
			contenido.setId(newId);
			// Add to list
			contenidos.add(contenido);
			
			logger.debug("Added new person");
			return contenido;
		} catch (Exception e) {
			logger.error(e);
			return null;
		}
	}
	
}
